package com.sjy.system.mapper;

import java.util.List;

import com.sjy.common.core.domain.entity.SysDept;
import com.sjy.system.domain.SysTree;
import org.apache.ibatis.annotations.Param;

/**
 * 树形数据存储Mapper接口
 *
 * @author lzm
 * @date 2023-06-19
 */
public interface SysTreeMapper {
    /**
     * 查询树形数据存储
     *
     * @param treeId 树形数据存储主键
     * @return 树形数据存储
     */
    public SysTree selectSysTreeByTreeId(Long treeId);

    /**
     * 查询树形数据存储列表
     *
     * @param sysTree 树形数据存储
     * @return 树形数据存储集合
     */
    public List<SysTree> selectSysTreeList(SysTree sysTree);

    /**
     * 新增树形数据存储
     *
     * @param sysTree 树形数据存储
     * @return 结果
     */
    public int insertSysTree(SysTree sysTree);

    /**
     * 修改树形数据存储
     *
     * @param sysTree 树形数据存储
     * @return 结果
     */
    public int updateSysTree(SysTree sysTree);

    /**
     * 删除树形数据存储
     *
     * @param treeId 树形数据存储主键
     * @return 结果
     */
    public int deleteSysTreeByTreeId(Long treeId);

    /**
     * 修改子元素关系
     *
     * @param trees 子元素
     * @return 结果
     */
    int updateTreeChildren(@Param("trees") List<SysTree> trees);

    /**
     * 校验节点名称是否唯一
     *
     * @param treeName 节点名称
     * @param parentId 父部门ID
     * @return 结果
     */
    SysTree checkDeptNameUnique(@Param("treeName") String treeName, @Param("parentId") Long parentId);

    /**
     * 根据ID查询所有子节点
     *
     * @param treeId 节点ID
     * @return 子节点数
     */
    int selectNormalChildrenTreeById(Long treeId);

    /**
     * 根据ID查询所有子节点
     *
     * @param treeId 节点ID
     * @return 节点列表
     */
    List<SysTree> selectChildrenTreeById(Long treeId);

    /**
     * 是否存在子节点
     *
     * @param treeId 节点ID
     * @return 结果
     */
    List<Integer> hasChildByTreeId(Long treeId);
}
